package com.itsu.mongodb.service.impl;

import cn.hutool.core.util.ObjectUtil;
import com.itsu.interfaces.entity.UserLocation;
import com.itsu.interfaces.service.UserLocationService;
import org.apache.dubbo.config.annotation.Service;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.common.geo.GeoPoint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.GetQuery;
import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder;
import org.springframework.data.elasticsearch.core.query.UpdateQuery;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;

@Service
public class UserLocationServiceImpl implements UserLocationService {

//    @Autowired
//    ElasticsearchTemplate template;
//
//
//    /**
//     * 这个方法什么时候执行 ??
//     * <bean id=  class=  initMethod= de... />
//     * 当这个Bean被Spring容器创建完后就会执行
//     */
//    @PostConstruct
//    public void initIndex() {
//        //  创建索引
//        if (!template.indexExists(UserLocation.class)) {
//            if (template.createIndex(UserLocation.class)) {
//                //  添加映射
//                template.putMapping(UserLocation.class);
//            }
//        }
//    }
//
//    @Override
//    public Boolean updateUserLocation(Long userId, Double longitude, Double latitude, String address) {
//        GetQuery getQuery = new GetQuery();
//        getQuery.setId(userId.toString());
//        UserLocation userLocation = template.queryForObject(getQuery, UserLocation.class);
//        if (ObjectUtil.isEmpty(userLocation)) {
//            UserLocation location = new UserLocation();
//            location.setUserId(userId);
//            location.setLocation(new GeoPoint(longitude, latitude));
//            location.setAddress(address);
//            location.setCreated(System.currentTimeMillis());
//            location.setUpdated(null);
//            location.setLastUpdated(null);
//
//            String index = template.index(new IndexQueryBuilder().withObject(location).build());
//            return  index != null;
//        }
//
//        UpdateQuery updateQuery = new UpdateQuery();
//        updateQuery.setClazz(userLocation.getClass());
//        updateQuery.setId(userId.toString());
//
//        UpdateRequest updateRequest = new UpdateRequest();
//        // 如果使用的是对象 会出现属性覆盖
//        Map<String, Object> mm = new HashMap<>();
//        mm.put("location", new GeoPoint(latitude, longitude));
//        mm.put("address", address);
//        updateRequest.doc(mm);
//
//        updateQuery.setUpdateRequest(updateRequest);
//
//        UpdateResponse update = template.update(updateQuery);
//        return update.getResult().getOp() >= 1;
//    }
}
